package negocio;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

@Entity
@Table(name="LVTP_CASAS_CENTRALES")
public class CasaCentral
{
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column (name="ID_CASA_CENTRAL")
	private Integer codigo;
	@Column (name="PEDIDO_VIGENCIA_DIAS")
	private Integer pedidoVigenciaDias;
	@Column (name="PORCENJE_GANANCIA")
	private Float porcentajeDeGanancia;
	
	@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
	@LazyCollection(LazyCollectionOption.FALSE)
	@org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
	@JoinColumn(name="ID_CASA_CENTRAL")
	private Set<ListaDePreciosCasaCentral> listasDePrecios;
	
	@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
	@LazyCollection(LazyCollectionOption.FALSE)
	@org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
	@JoinColumn(name="ID_CASA_CENTRAL")
	private Set<DescuentoGeneral> descuentos;

	public CasaCentral()
	{
		descuentos = new HashSet<DescuentoGeneral>();
	}
	
	public Integer getCodigo() {
		return codigo;
	}

	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}

	public Integer getPedidoVigenciaDias() {
		return pedidoVigenciaDias;
	}

	public void setPedidoVigenciaDias(Integer pedidoVigenciaDias) {
		this.pedidoVigenciaDias = pedidoVigenciaDias;
	}

	public Float getPorcentajeDeGanancia() {
		return porcentajeDeGanancia;
	}

	public void setPorcentajeDeGanancia(Float porcentajeDeGanancia) {
		this.porcentajeDeGanancia = porcentajeDeGanancia;
	}

	public Set<ListaDePreciosCasaCentral> getListasDePrecios() {
		return listasDePrecios;
	}

	public void setListasDePrecios(Set<ListaDePreciosCasaCentral> listasDePrecios) {
		this.listasDePrecios = listasDePrecios;
	}

	public Set<DescuentoGeneral> getDescuentos() {
		return descuentos;
	}

	public void setDescuentos(Set<DescuentoGeneral> descuentos) {
		this.descuentos = descuentos;
	}
	
	public ListaDePreciosCasaCentral obtenerListaDePrecios(){
		if(listasDePrecios!=null && listasDePrecios.size() > 0){
			return listasDePrecios.iterator().next();
		}
		return null;
	}
	
	public boolean equals(Object obj)
	{
		if (obj != null && this.getClass().isInstance(obj)){
			CasaCentral tmp = (CasaCentral)obj;
			return codigo.equals(tmp.getCodigo());
		}
		return false;
	}
	
	public ListaDePreciosItem obtenerListaDePrecioItem(Producto producto){
		for(ListaDePreciosCasaCentral lista : listasDePrecios){
			ListaDePreciosItem i = lista.obtenerItem(producto);
			if (i!=null)
				return i;
		}
		return null;
	}
	
	public void actualizarStock(Producto producto, Integer cantidad){
		ListaDePreciosItem item = obtenerListaDePrecioItem(producto);
		item.reducirStock(cantidad);
	}
}
